SETBUF

Section: MINTLIB LIBRARY FUNCTIONS (3)
Updated: 3 March 1993
Index Return to Main Contents
 

NAME

setbuf, setlinebuf, setvbuf - assign buffering to a stream  

SYNOPSIS

#include <stdio.h>
#include <unistd.h> // Only needed for setlinebuf

void setbuf(FILE *stream, char *buf);

void setlinebuf(FILE *stream);

int setvbuf(FILE *stream, char *buf, int type, size_t size);
 

DESCRIPTION

setbuf may be used after a stream has been opened but before it is read or written. It causes the array pointed to by buf to be used instead of an automatically allocated buffer. If buf is the NULL pointer input/output will be completely unbuffered. A constant BUFSIZ, defined in <stdio.h>, tells how big an array is needed:

  char buf[BUFSIZ]; setlinebuf may be used after a stream has been opened and after it is read or written. It changes the buffering on stream from block/unbuffered to line buffered. setvbuf may be used after a stream has been opened but before it is read or written. The type parameter determines how stream will be buffered. Legal values for type (defined in <stdio.h>) are:
  _IOFBF: causes input/output to be fully buffered.
  _IOLBF: causes output to be line buffered; the buffer
          will be flushed when a newline is written,
          the buffer is full, or input is requested.
  _IONBF: causes input/output to be fully unbuffered. If buf is not the NULL pointer, the array it points to will be used for buffering, instead of an automatically allocated buffer. size specifies the size of the buffer to be used. The constant BUFSIZ in <stdio.h> is suggested as a good buffer size. If input/output is unbuffered, buf and size are ignored. By default, output to a terminal is line buffered and all other input/output is fully buffered.  

SEE ALSO

fopen(3), getc(3), putc(3)  

RETURN VALUES

setvbuf returns a non-zero value if an illegal value for type or size is provided; otherwise, it will return zero.  

NOTES

A common source of error is allocating buffer space as an "automatic" variable in a code block, and then failing to close the stream in the same block. setlinebuf is available on BSD UN*X, and not on System V.
 

Index

NAME
SYNOPSIS
DESCRIPTION
SEE ALSO
RETURN VALUES
NOTES

This document was created by man2html, using the manual pages.
Time: 11:14:45 GMT, June 22, 2025